﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using LM.Negocio.Objetos;
using LM.InterfacesFabricas.DTOs;
using LM.InterfacesFabricas.Utilidades;
using LM.Repositorios.Interfaces;

namespace LM.Repositorios.Conversores
{
    public class ConversorDeCliente
    {

        public Cliente Converta(DtoCliente dtoCliente)
        {
            var cliente = new Cliente();

            cliente.Codigo = dtoCliente.Codigo;
            cliente.Nome = dtoCliente.Nome;
            cliente.Cpf = dtoCliente.Cpf;
            cliente.Cnh = dtoCliente.Cnh;
            cliente.TipoDoCliente = dtoCliente.TipoDoCliente;
            cliente.Endereco = dtoCliente.Endereco.Select(item => new ConversorDeEndereco().Converta(item)).ToList();
            cliente.Telefones = dtoCliente.Telefones.Select(item => new ConversorDeTelefone().Converta(item)).ToList();
            //Dependentes

            return cliente;
        }

        public DtoCliente Converta(Cliente cliente)
        {
            if (cliente != null)
            {
                var dtoCliente = new DtoCliente();
                dtoCliente.Codigo = cliente.Codigo;
                dtoCliente.Nome = cliente.Nome;
                dtoCliente.Cpf = cliente.Cpf;
                dtoCliente.Cnh = cliente.Cnh;
                dtoCliente.TipoDoCliente = cliente.TipoDoCliente;
                dtoCliente.Endereco = cliente.Endereco.Select(item => new ConversorDeEndereco().Converta(item)).ToList();
                dtoCliente.Telefones = cliente.Telefones.Select(item => new ConversorDeTelefone().Converta(item)).ToList();
                //Dependentes
                return dtoCliente;
            }
            return null;
        }
        
        public Cliente ConvertaParaObjetoPersistido(DtoCliente dtoCliente) 
        {
            var clientePersistido = FabricaDeRepositorios.Crie<IRepositorioDeCliente>().Consulte(dtoCliente.Codigo);

            var cliente = new Cliente();
            cliente.Id = clientePersistido.Id;
            cliente.Codigo = dtoCliente.Codigo;
            cliente.Nome = dtoCliente.Nome;
            cliente.Cpf = dtoCliente.Cpf;
            cliente.Cnh = dtoCliente.Cnh;
            cliente.TipoDoCliente = dtoCliente.TipoDoCliente;
            cliente.Endereco = dtoCliente.Endereco.Select(item => new ConversorDeEndereco().ConvertaParaObjetoPersistido(item)).ToList();
            cliente.Telefones = dtoCliente.Telefones.Select(item => new ConversorDeTelefone().ConvertaParaObjetoPersistido(item)).ToList();

            return cliente;
        }
    }
}
